package com.hspedu.array_;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author DL5O
 * @version 1.0
 */
public class ArraysMethod01 {
    public static void main(String[] args) {

        Integer[] integers = {1, 2, 3, 4, 5, 6};
        //显示遍历数组

       /* for (int i = 0; i < integers.length; i++) {
            System.out.println(integers[i] +"");

        }*/

        /*
              StringBuilder b = new StringBuilder();
                b.append('[');
                for (int i = 0; ; i++) {
                    b.append(String.valueOf(a[i]));
                    if (i == iMax)
                        return b.append(']').toString();
                    b.append(", ");
                }
         */
//        System.out.println(Arrays.toString(integers));

        //演示 sort方法使用
        Integer[] arr = {9, 6, 99, 88, 36, 10};
        //进行排序
        //1.可以直接使用冒泡排序，也可以直接使用Arrays提供的sort()方法
        //2.因为数组是引用类型，通过sort排序后会直接影响到实参arr
        //3.sort重载的，也可以通过传入一个接口 Comparator 实现定制排序，默认从小到大
        //4.调用 定制排序 时，传入两个参数
        //   (1)排序的数组 arr
        //   (2)要求实现 compare方法
        //5.先演示效果，再解释
        //6.体现了接口编程的方式

        System.out.println("====排序前====");
        System.out.println(Arrays.toString(arr));


        /*
         while (left < right) {
            int mid = (left + right) >>> 1;
            if (c.compare(pivot, a[mid]) < 0)
                right = mid;
            else
                left = mid + 1;
         }

         */
        //(1)Arrays.sort(arr, new Comparator()
        //(2)最终到 TimSort 类的 private static <T> void binarySort(T[] a, int lo, int hi,int stat
        //                          Comparator<? super T> c)
        //(3)执行到 binarySort 方法的代码, 会根据动态绑定机制 c.compare()执行我们传入
        //  匿名内部类的 compare ()
        //  while (left < right) {
        //                int mid = (left + right) >>> 1;
        //                if (c.compare(pivot, a[mid]) < 0)
        //                    right = mid;
        //                else
        //                    left = mid + 1;
        //            }
        //(4) Arrays.sort(arr, new Comparator() {
        //            @Override
        //            public int compare(Object o1, Object o2) {
        //                Integer i1 = (Integer)o1;
        //                Integer i2 = (Integer)o2;
        //                return i2-i1;//返回的是大于0还是小于0影响排序的方法
        //            }
        //        });
        // (5) public int compare(Object o1, Object o2)
        //     返回的值是大于0还是小于0会影响排序的结果
        //     体现了接口编程 + 动态绑定 + 匿名内部类的综合使用，在底层框架和源码中非常常见
        //
        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1 = (Integer)o1;
                Integer i2 = (Integer)o2;
                return i2-i1;//返回的是大于0还是小于0影响排序的方法
            }
        });
//        Arrays.sort(arr);
        System.out.println("====排序后====");
        System.out.println(Arrays.toString(arr));
    }
}
